package com.demo.util;

import redis.clients.jedis.Jedis;

public class Redis {
    private static Jedis redis = null;
    private Redis(){};
    public static Jedis getRedis(){
        if(redis == null){//第一层检查，检查是否有引用指向对象，高并发情况下会有多个线程同时进入
            //双重检查，防止多个线程同时进入第一层检查(因单例模式只允许存在一个对象，故在创建对象之前无引用指向对象，所有线程均可进入第一层检查)
            //当某一线程获得锁创建一个Singleton对象时,即已有引用指向对象，singleton不为空，从而保证只会创建一个对象
            //假设没有第二层检查，那么第一个线程创建完对象释放锁后，后面进入对象也会创建对象，会产生多个对象
            synchronized(Redis.class){
                if (redis == null){//第二层检查
                    redis = new Jedis("127.0.0.1",6379);
                }
            }
        }
        return redis;
    }

}
